﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;

namespace HeathCareSystem.wuc
{
    public partial class wucBenhNhanMoi : System.Web.UI.UserControl
    {
        List<DanhSachYeuCauDTO> listDSYC = new List<DanhSachYeuCauDTO>();
        string stt;
        string MBH;
        protected void Page_Load(object sender, EventArgs e)
        {
      
            PanelChange(true, false);
            lblTilePanel.Text = "Bệnh Nhân Mới";
            ddlTenBS.DataSource = new NguoiDungBUS().LayDanhSachBacSi();
            ddlTenBS.DataTextField = "HoTen";
            ddlTenBS.DataValueField = "MaNguoiDung";
            ddlTenBS.DataBind();
            if (ddlTenBS.Items.Count != 0)
            {
                ddlTenBS.SelectedIndex = 0;
            }                                       
        }

        private void EnableButton(bool bCap, bool bThem, bool bXoa, bool bCapNhat)
        {
            btnCap.Enabled = bCap;
            btnThem.Enabled = bThem;
            btnXoa.Enabled = bXoa;
            btncapNhat.Enabled = bCapNhat;
        }

        private void PanelChange(bool bPnlBenhNhanMoi, bool bPnlBenhNhanCu)
        {
            pnlBenhNhanMoi.Visible = bPnlBenhNhanMoi;
            pnlBenhNhanCu.Visible = bPnlBenhNhanCu;
        }

        #region Cac Ham Kiem Tra
        private int KiemTraHoTen()
        {
            if (txtTen.Text.Equals(""))
            {
                return 1; //kiem tra ho ten
            }
            else
            {
                if (txtTen.Text.IndexOf("*") > 0 || txtTen.Text.IndexOf("@") > 0 || txtTen.Text.IndexOf("!") > 0
                    || txtTen.Text.IndexOf("$") > 0 || txtTen.Text.IndexOf("%") > 0 || txtTen.Text.IndexOf("&") > 0)
                    return 8;
                else
                    return -1;
            }               
        }

        private int KiemTraNgaySinh()
        {
            if (txtNgay.Text.Equals("tháng/ngày/năm") || txtNgay.Text.Equals(""))
            {
                return 2; //kiem tra ngay sinh
            }
            else
                return -1;
        }

        private int KiemTraDiaChi()
        {
            if (txtDiaChi.Text.Equals(""))
            {
                return 3; //kiem tra dia chi
            }
            else
                return -1;
        }

        private int KiemTraSoDienThoai()
        {
            if (txtDienThoai.Text.Equals(""))
            {
                return 4; //kiem tra so dien thoai
            }
            else
                return -1;
        }

        private int TinhTuoi(int tuoiCanTinh)
        {
            int yearNow = DateTime.Now.Year;
            return yearNow - tuoiCanTinh;
        }

        private int KiemTraNgaySinhHopLe()
        {
            try
            {
                DateTime.Parse(txtNgay.Text);
                int namsinh = int.Parse(txtNgay.Text.ToString().Substring(6, 4));
                int tuoi = TinhTuoi(namsinh);
                if(tuoi > 90 || tuoi < 10) 
                {
                    return 7;
                }
                return -1;
            }
            catch (System.Exception ex)
            {
                return 5;
            }
        }

        private int KiemTraSoDienThoaiHopLe()
        {
            try
            {
                Int64.Parse(txtDienThoai.Text);
                string temp = txtDienThoai.Text;
                if (temp.Length > 13 || temp.Length < 9)
                {
                    return 6;
                }
                return -1;
            }
            catch (System.Exception ex)
            {
                return 6;
            }
        }

        private int KiemTraDau()
        {
            int dem = 0;
            if (KiemTraHoTen() == 1)
            {
                lblerrorHoTen.Text = "Chưa Nhập Họ Tên";
                dem += 1;
            }
            else
            {
                lblerrorHoTen.Text = "";
            }
            if (KiemTraNgaySinh() == 2)
            {
                lblerrorNgaySinh.Text = "Chưa Nhập Ngay Sinh";
                dem += 2;
            }
            if (KiemTraDiaChi() == 3)
            {
                lblerrorDiaChi.Text = "Chưa Nhập Dia Chi";
                dem += 3;
            }
            else
            {
                lblerrorDiaChi.Text = "";
            }
            if (KiemTraSoDienThoai() == 4)
            {
                lblerrorSoDienThoai.Text = "Chưa Nhập So Dien Thoai";
                dem += 4;
            }
            return dem;
        }

        private int KiemTra()
        {
            int dem = 0;
            if (KiemTraDau() > 0)
            {
                return KiemTraDau();
            }
            if (KiemTraNgaySinhHopLe() == 5)
            {
                lblerrorNgaySinh.Text = "Ngày sinh không đúng định dạng: tháng/năm/ngày";
                dem += 5;
            }
            if (KiemTraSoDienThoaiHopLe() == 6)
            {
                lblerrorSoDienThoai.Text = "Số điện thoại từ 10 đến 12 chữ số";
                dem += 6;
            }
            else
            {
                lblerrorSoDienThoai.Text = "";
            }
            if (KiemTraNgaySinhHopLe() == 7)
            {
                lblerrorNgaySinh.Text = "Phòng Khám chỉ nhận bệnh nhân có độ tuổi từ 10 đến 90 tuổi";
                dem += 7;
            }
            else
            {
                lblerrorNgaySinh.Text = "";
            }
            if (KiemTraHoTen() == 8)
            {
                lblerrorHoTen.Text = "Họ tên không thể chứa ký tự đặc biệt: *, @, $...";
                dem += 8;
            }
            else
            {
                lblerrorHoTen.Text = "";
            }
            return dem;
        }
        #endregion        

        protected void btnThem_Click(object sender, EventArgs e)
        {
            btnTaoBenhNhanMoi.Text = "Tạo Bệnh Nhân Mới";
            if (KiemTra() > 0)
            {
                return;
            }

            EnabledValidateControl(false);
            BenhNhanDTO bnDTO = GanThongTinBenhNhanToBenhNhanDTO();

            //tao tai khoan
            TaiKhoanDTO tkDTO = new TaiKhoanDTO();
            tkDTO.tenDangNhap = txtMa.Text;
            tkDTO.matKhau = txtMa.Text;
            tkDTO.maLoaiTaiKhoan = "LTK04";

            new TaiKhoanBUS().ThemTaiKhoanMoi(tkDTO);
            bnDTO.maTaiKhoan = new TaiKhoanBUS().LayMaTaiKhoanCuoi();

            if (new BenhNhanBUS().ThemBenhNhan(bnDTO))
            {
                //them vo bang benh nhan trong ngay
                CapMaSoKhamBenh();               

                EnableButton(false, false, true, true);
            }
            else
            {
                EnableButton(false, false, false, false);
                lblThongBao.Text = "Thêm Bệnh Nhân Mới thất bại!";
            }
        }

        private void CapMaSoKhamBenh()
        {
            BenhNhanTrongNgayDTO bntnDTO = new BenhNhanTrongNgayDTO();
            int iMTT = new BenhNhanTrongNgayBUS().TaoMaSoKhamBenhTuDong();
            stt = bntnDTO.maSoKhamBenh = iMTT.ToString("000");
            bntnDTO.maBenhNhan = txtMa.Text;
            // tao chi tiet benh an
            ChiTietBenhAnDTO ctbaDTO = new ChiTietBenhAnDTO();
            ctbaDTO.maBenhNhan = bntnDTO.maBenhNhan;            
            if (ddlTenBS.Enabled == true)
            {
                bntnDTO.maBacSi = ddlTenBS.SelectedValue.ToString();
                ctbaDTO.maNguoiDung = bntnDTO.maBacSi;
            }
            else
            {
                bntnDTO.maBacSi = null;
                ctbaDTO.maNguoiDung = null;
            }
            ctbaDTO.ngayKham = DateTime.Now;
            //khoi tao chi tiet benh an
            ChiTietBenhAnBUS.KhoiTaoChiTietBenhAn(ctbaDTO);
            
            ctbaDTO = ChiTietBenhAnBUS.LayThongTinChiTietBenhAnMoi();
            bntnDTO.maChiTietBenhAn = ctbaDTO.maChiTietBenhAn;
            new BenhNhanTrongNgayBUS().ThemBenhNhanTrongNgayMoi(bntnDTO);

            string maSoKhamBenh = stt;
            string strThongBao = string.Format("Thêm Bệnh Nhân Mới Thành Công! \n Mã Số Khám Bệnh: {0}", maSoKhamBenh.ToString());
            lblThongBao.Text = strThongBao;
        }

        private void HienThiThongTin(BenhNhanDTO benhNhanDTO)
        {
            PanelChange(true, false);
            this.txtMa.Text = benhNhanDTO.maBenhNhan;
            this.txtTen.Text = benhNhanDTO.hoTen;
            this.txtNgay.Text = string.Format("{0:MM/dd/yyyy}", benhNhanDTO.ngaySinh);
            this.txtDiaChi.Text = benhNhanDTO.diaChi;
            this.txtDienThoai.Text = benhNhanDTO.soDienThoai;
            if (benhNhanDTO.gioiTinh == rbtnNam.Text)
                rbtnNam.Checked = true;
            if (benhNhanDTO.gioiTinh == rbtnNu.Text)
                rbtnNu.Checked = true;
            if (benhNhanDTO.tinhTrangHonNhan == rbtnAlone.Text)
                rbtnAlone.Checked = true;
            if (benhNhanDTO.tinhTrangHonNhan == rbtnMiery.Text)
                rbtnMiery.Checked = true;

            ddlQue.SelectedItem.Text = benhNhanDTO.queQuan;
        }

        protected void btnTaoBenhNhanMoi_Click(object sender, EventArgs e)
        {
            lblThongBao.Text = "";
            if (btnTaoBenhNhanMoi.Text == "Tạo Bệnh Nhân Mới")
            {
                btnTaoBenhNhanMoi.Text = "Hủy Bệnh Nhân Mới";
                PanelChange(true, false);
                lblTilePanel.Text = "Bệnh Nhân Mới";
                this.txtMa.Text = new BenhNhanBUS().TaoMaBenhNhan();
                this.txtDienThoai.Text = this.txtTen.Text = this.txtDiaChi.Text = string.Empty;
                this.rbtnNam.Checked = true;
                this.rbtnNu.Checked = false;
                this.rbtnAlone.Checked = true;
                this.rbtnMiery.Checked = false;

                EnableButton(false, true, false, false);
                EnabledValidateControl(true);
            }
            else
            {
                btnTaoBenhNhanMoi.Text = "Tạo Bệnh Nhân Mới";
                EnableButton(false, false, false, false);
                PanelChange(true, false);
                lblTilePanel.Text = "Bệnh Nhân Mới";
                this.txtMa.Text = string.Empty;
                this.txtDienThoai.Text = this.txtTen.Text = this.txtDiaChi.Text = string.Empty;
                this.rbtnNam.Checked = true;
                this.rbtnNu.Checked = false;
                this.rbtnAlone.Checked = true;
                this.rbtnMiery.Checked = false;
                EnabledValidateControl(true);
            }

        }

        private void EnabledValidateControl(bool flag)
        {
            
        }

        protected void Fill_GV()
        {
            List<BenhNhanDTO> lst = new BenhNhanBUS().TimBenhNhan(txtTenBenhNhan.Text.ToString());
            gvThongTinBN.DataSource = lst;
            gvThongTinBN.DataBind();
        }

        protected void btncapNhat_Click(object sender, EventArgs e)
        {
            if (KiemTra() > 0)
            {
                return;
            }
            BenhNhanDTO bnDTO = GanThongTinBenhNhanToBenhNhanDTO();
            if (new BenhNhanBUS().CapNhatBenhNhan(bnDTO))
            {
                string strThongBao = string.Format("Cập Nhật Bệnh Nhân Thành Công!");
                lblThongBao.Text = strThongBao;
            }
            else
            {
                lblThongBao.Text = "Cập Nhật Bệnh Nhân thất bại!";
            }
        }

        private BenhNhanDTO GanThongTinBenhNhanToBenhNhanDTO()
        {
            string gioiTinh;
            string tinhTrangHonNhan;
            BenhNhanDTO bnDTO = new BenhNhanDTO();
            bnDTO.maBenhNhan = txtMa.Text;
            bnDTO.hoTen = txtTen.Text;
            bnDTO.ngaySinh = DateTime.Parse(txtNgay.Text);
            bnDTO.diaChi = txtDiaChi.Text;
            bnDTO.soDienThoai = txtDienThoai.Text;
            if (rbtnNam.Checked == true)
                gioiTinh = rbtnNam.Text;
            else
            {
                gioiTinh = rbtnNu.Text;
            }
            bnDTO.gioiTinh = gioiTinh;

            if (rbtnAlone.Checked == true)
                tinhTrangHonNhan = rbtnAlone.Text;
            else
            {
                tinhTrangHonNhan = rbtnMiery.Text;
            }
            bnDTO.tinhTrangHonNhan = tinhTrangHonNhan;
            bnDTO.queQuan = ddlQue.Text;
            bnDTO.maTaiKhoan = 1;

            return bnDTO;
        }

        

        protected void Button1_Click(object sender, EventArgs e)
        {
            //lblThongBaoLoi.Text = "good";
            if (ddlTenBS.Enabled == true)
            {
                ddlTenBS.Enabled = false;
                return;
            }
            else
            {
                ddlTenBS.Enabled = true;
                return;
            }
        }

        //protected void lbtnYeuCau_Click(object sender, EventArgs e)
        //{
        //    DanhSachYeuCauDTO dsycDTO = new DanhSachYeuCauDTO();
        //    dsycDTO.STT = stt;
        //    listDSYC.Add(dsycDTO);
        //    gvDanhSachYeuCau.DataSource = listDSYC;
        //    gvDanhSachYeuCau.DataBind();
        //}

        protected void txtNgay_TextChanged(object sender, EventArgs e)
        {
            txtNgay.ForeColor = Color.Black;
        }

        protected void btnCap_Click(object sender, EventArgs e)
        {
            EnableButton(false, false, true, true);
            CapMaSoKhamBenh();
        }

        protected void gvThongTinBN_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {

        }


        protected void gvThongTinBN_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            btnTaoBenhNhanMoi.Text = "Tạo Bệnh Nhân Mới";
            // Dòng select
            int irow = Convert.ToInt32(e.CommandArgument);
            string MaBenhNhan = gvThongTinBN.Rows[irow].Cells[1].Text;
            BenhNhanDTO bn = new BenhNhanBUS().HienThiBenhNhanTheoMa(MaBenhNhan);
            HienThiThongTin(bn);
            PanelChange(true, false);
            EnableButton(true, false, true, true);
        }

        protected void gvThongTinBN_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvThongTinBN.PageIndex = e.NewPageIndex;
            Fill_GV();
        }

        protected void ddlLoc_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        protected void btnTim_Click(object sender, EventArgs e)
        {
            lblTilePanel.Text = "Bệnh Nhân";
            PanelChange(false, true);
            if (txtTenBenhNhan.Text.Equals(""))
            {
                lblThongBao_TimBenhNhan.Text = "Chưa nhập tên cần tìm";
            }
            else
            {
                if (txtTenBenhNhan.Text.IndexOf("*") >= 1 || txtTenBenhNhan.Text.IndexOf("@") > 0 || txtTenBenhNhan.Text.IndexOf("!") > 0
                    || txtTenBenhNhan.Text.IndexOf("$") > 0 || txtTenBenhNhan.Text.IndexOf("%") > 0 || txtTenBenhNhan.Text.IndexOf("&") > 0)
                {
                    lblThongBao_TimBenhNhan.Text = "Từ Khóa không thể có ký tự đặc biệt như: *, @, #, $...";
                }                    
                else
                {
                    Fill_GV();
                    if(gvThongTinBN.Rows.Count == 0)
                        lblThongBao_TimBenhNhan.Text = "Không tìm thấy dữ liệu!";
                    else
                        lblThongBao_TimBenhNhan.Text = "";
                }                    
            }            
        }

        protected void btnBenhNhanCu_Click(object sender, EventArgs e)
        {
            PanelChange(false, true);
            txtTenBenhNhan.Text = string.Empty;
            gvThongTinBN.DataSource = null;
            gvThongTinBN.DataBind();
            lblTilePanel.Text = "Bệnh Nhân";
        }

        protected void Xoa()
        {

        }
        protected void btnXoa_Click(object sender, EventArgs e)
        {
            if (new BenhNhanBUS().XoaBenhNhan(this.txtMa.Text))
            {
                lblThongBao.Text = "Xóa Bệnh Nhân Thành Công!";
            }
            else
                lblThongBao.Text = "Xóa Bệnh Nhân Thất Bại!";
        }
        protected void btnCancel_Click(object sender, EventArgs e)
        {

        }
        protected void btnHuyTim_Click(object sender, EventArgs e)
        {
            btnTaoBenhNhanMoi.Text = "Tạo Bệnh Nhân Mới";
            EnableButton(false, false, false, false);
            PanelChange(true, false);
            lblTilePanel.Text = "Bệnh Nhân Mới";
            this.txtMa.Text = string.Empty;
            this.txtDienThoai.Text = this.txtTen.Text = this.txtDiaChi.Text = string.Empty;
            this.rbtnNam.Checked = true;
            this.rbtnNu.Checked = false;
            this.rbtnAlone.Checked = true;
            this.rbtnMiery.Checked = false;
            EnabledValidateControl(true);
        }

       

        protected void btnOkay_Click(object sender, EventArgs e)
        {
            if (new BenhNhanBUS().XoaBenhNhan(this.txtMa.Text))
            {
                lblThongBao.Text = "Xóa Bệnh Nhân Thành Công!";
            }
            else
                lblThongBao.Text = "Xóa Bệnh Nhân Thất Bại!";
        }
    }
}